home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / e / lsestuff / msgserver.e < prev    next >
Text File  |  1999-11-29  |  2KB  |  97 lines

  1. OPT MODULE
  2.  
  3. MODULE '*ipc'
  4. MODULE '*collectionX'
  5. MODULE '*collectionYX'
  6. MODULE '*collectionZYX'
  7.  
  8. EXPORT OBJECT newMsgServer
  9.    configPort:PTR TO newPort ->make your orders here..(PUBLIC)
  10.    nmPort:PTR TO newPort     ->send your msg's here..
  11.    ohyeah:PTR TO collectionZYX
  12.    nm:PTR TO newMsg
  13. ENDOBJECT
  14.  
  15. OBJECT travmsg OF collectionX_travObj
  16.    nms:PTR TO newMsgServer
  17.    type
  18.    cmnd
  19.    data
  20. ENDOBJECT
  21.  
  22. PROC sendmsg(travmsg:PTR TO travmsg)
  23.    DEF node:PTR TO xniv
  24.    node := travmsg.node
  25.    travmsg.nms.nm.do(node.id, travmsg.type,
  26.                      travmsg.cmnd, travmsg.data)
  27. ENDPROC
  28.  
  29. PROC newMsgServer() OF newMsgServer
  30.    DEF signals, cfgsig, nmsig, msg:PTR TO newMsg, command,
  31.        exit=FALSE, type, data, nayx:PTR TO collectionYX,
  32.        nax:PTR TO collectionX, travmsg:travmsg
  33.  
  34.    NEW self.configPort.newPort('newMsgServer-Config')
  35.    NEW self.nmPort.newPort()
  36.    NEW self.ohyeah.collectionZYX()
  37.    NEW self.nm.newMsg()
  38.  
  39.    cfgsig := self.configPort.getSigF()
  40.    nmsig := self.nmPort.getSigF()
  41.    REPEAT
  42.       signals:=Wait(cfgsig OR nmsig)
  43.  
  44.       IF signals AND nmsig
  45.          WHILE (msg := self.nmPort.collect())
  46.             command := msg.getCmnd()
  47.             type := msg.getType()
  48.             data := msg.getData()
  49.             nayx := self.ohyeah.getCollectionYX(type)
  50.             IF nayx
  51.                nax := nayx.getCollectionX(command)
  52.                IF nax
  53.                   travmsg.nms := self
  54.                   travmsg.type := type
  55.                   travmsg.cmnd := command
  56.                   travmsg.data := data
  57.                   nax.travNodes({sendmsg}, travmsg)
  58.                ENDIF
  59.             ENDIF
  60.             msg.reply()
  61.          ENDWHILE
  62.       ENDIF
  63.  
  64.       IF signals AND cfgsig
  65.          WHILE (msg := self.nmPort.collect())
  66.             command := msg.getCmnd()
  67.             data := msg.getData()
  68.             SELECT command
  69.             CASE "CFG"
  70.                IF data
  71.                   self.ohyeah.applyAllFrom(data)
  72.                   self.ohyeah.cleanUp()
  73.                ENDIF
  74.             CASE "DIE" -> kill this server..
  75.                exit := TRUE
  76.             ENDSELECT
  77.             msg.reply(self.nmPort)
  78.          ENDWHILE
  79.       ENDIF
  80.    UNTIL exit
  81.  
  82. ENDPROC
  83.  
  84. EXPORT PROC getMsgServerReceivePort()
  85.    DEF cfgport
  86.    DEF reply
  87.    DEF msg:PTR TO newMsg
  88.    cfgport := FindPort('newMsgServer-Config')
  89.    IF cfgport = NIL THEN RETURN NIL
  90.    NEW msg.newMsg()
  91.    msg.do(cfgport, NIL, NIL, NIL)
  92.    reply := msg.getReply()
  93.    END msg
  94. ENDPROC reply
  95.  
  96.  
  97.